home *** CD-ROM | disk | FTP | other *** search
- package java.text;
-
- final class DigitList implements Cloneable {
- public static final int MAX_COUNT = 19;
- public int decimalAt;
- public int count;
- public byte[] digits = new byte[19];
-
- public void clear() {
- this.decimalAt = 0;
- this.count = 0;
- }
-
- public void append(int var1) {
- if (this.count < 19) {
- this.digits[this.count] = (byte)var1;
- }
-
- ++this.count;
- }
-
- public final double getDouble() {
- StringBuffer var1 = new StringBuffer(this.count);
- if (this.count > 19) {
- this.count = 19;
- }
-
- for(int var2 = 0; var2 < this.count; ++var2) {
- var1.append((char)this.digits[var2]);
- }
-
- long var3 = Long.parseLong(var1.toString());
- return (double)var3 * Math.pow((double)10.0F, (double)(this.decimalAt - this.count));
- }
-
- public final long getLong() {
- StringBuffer var1 = new StringBuffer(this.count);
-
- for(int var2 = 0; var2 < this.count; ++var2) {
- var1.append((char)this.digits[var2]);
- }
-
- return Long.parseLong(var1.toString());
- }
-
- private int fixNumber(double var1, StringBuffer var3, int var4) {
- int var5 = 0;
- double var6 = (double)0.0F;
- double var8 = (double)0.0F;
- int var10 = 0;
- double var11 = var1;
- var6 = Math.log(var1);
- var8 = Math.log((double)10.0F);
- double var13 = var6 / var8;
-
- for(var5 = (int)(var13 - (double)19.0F); var11 > (double)Long.MAX_VALUE; ++var10) {
- var11 /= (double)10.0F;
- }
-
- String var15 = Long.toString((long)var11);
-
- int var16;
- for(var16 = var15.length() - 1; var16 >= 0 && var15.charAt(var16) == '0'; --var16) {
- }
-
- for(int var17 = 0; var17 < var16 + 1; ++var17) {
- var3.append(var15.charAt(var17));
- this.digits[var17] = (byte)var15.charAt(var17);
- }
-
- this.decimalAt = (int)((double)(var10 - var5) + var13 - (double)var4);
- return var16 + 1;
- }
-
- public final void set(double var1, int var3) {
- int var4 = 0;
- double var5 = var1 * Math.pow((double)10.0F, (double)var3);
- long var7 = (long)var5;
- boolean var9 = false;
- StringBuffer var10 = new StringBuffer(19);
- if (var7 < 0L) {
- this.count = this.fixNumber(var5, var10, var3);
- var9 = true;
- }
-
- if (!var9) {
- var10.append(Long.toString(var7));
-
- while(var7 > 0L && (double)var7 < Math.pow((double)10.0F, (double)(var3 - 1))) {
- var10.insert(0, '0');
- var7 *= 10L;
- }
-
- for(var4 = var10.length() - 1; var4 >= 0 && var10.charAt(var4) == '0'; --var4) {
- --var3;
- }
-
- this.count = var4 + 1;
-
- for(int var11 = 0; var11 < this.count; ++var11) {
- this.digits[var11] = (byte)var10.charAt(var11);
- }
-
- this.decimalAt = this.count - var3;
- }
-
- if (this.decimalAt < 0) {
- this.decimalAt = 0;
- }
-
- }
-
- public final void set(long var1) {
- String var8;
- if (var1 == Long.MIN_VALUE) {
- var1 = -(var1 + 1L);
- var8 = Long.toString(var1).substring(0, 18);
- char var4 = Long.toString(var1).charAt(18);
- long var5 = (long)(Character.digit(var4, 10) + 1);
- if (var5 > 9L) {
- throw new InternalError("Internal NumberFormat error!");
- }
-
- var8 = var8 + Long.toString(var5);
- } else {
- var8 = Long.toString(var1);
- }
-
- if (var8.length() > 19) {
- var8 = var8.substring(0, 19);
- }
-
- int var10 = 0;
-
- int var9;
- for(var9 = var8.length() - 1; var9 >= 0 && var8.charAt(var9) == '0'; --var9) {
- --var10;
- }
-
- this.count = var9 + 1;
-
- for(int var6 = 0; var6 < this.count; ++var6) {
- this.digits[var6] = (byte)var8.charAt(var6);
- }
-
- this.decimalAt = this.count - var10;
- if (this.decimalAt < 0) {
- this.decimalAt = 0;
- }
-
- }
-
- public Object clone() {
- try {
- return (DigitList)super.clone();
- } catch (CloneNotSupportedException var1) {
- throw new InternalError();
- }
- }
-
- public boolean equals(Object var1) {
- if (this == var1) {
- return true;
- } else if (!(var1 instanceof DigitList)) {
- return false;
- } else {
- DigitList var2 = (DigitList)var1;
- if (this.hashCode() != var2.hashCode()) {
- return false;
- } else if (this.count != var2.count) {
- return false;
- } else if (this.digits.length != var2.digits.length) {
- return false;
- } else {
- for(int var3 = 0; var3 < this.digits.length; ++var3) {
- if (this.digits[var3] != var2.digits[var3]) {
- return false;
- }
- }
-
- return this.decimalAt == var2.decimalAt;
- }
- }
- }
-
- public int hashCode() {
- int var1 = 0;
-
- for(int var2 = 0; var2 < this.digits.length; ++var2) {
- short var3 = (short)(this.digits[var2] >> 16);
- short var4 = (short)this.digits[var2];
- var1 ^= var3 ^ var4;
- }
-
- return var1;
- }
- }
-